package mcpregister

import (
	"ai-mcp/mcp-tools"
	"github.com/mark3labs/mcp-go/mcp"
	"github.com/mark3labs/mcp-go/server"
)

// RegisterFilesTools 注册所有文件处理相关的工具函数到MCP服务中
// 参数：
//   - mcpService: MCP服务实例，用于注册工具函数
func RegisterFilesTools(mcpService *server.MCPServer) {
	// 创建工具对象
	// 读取文件内容工具
	readFileTool := mcp.NewTool(
		"read_file",
		mcp.WithDescription("读取文件并以字符串形式返回其内容"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("文件路径"),
		),
	)

	// 写入文件内容工具
	writeFileTool := mcp.NewTool(
		"write_file",
		mcp.WithDescription("将字符串内容写入指定文件路径"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("文件路径"),
		),
		mcp.WithString("content",
			mcp.Required(),
			mcp.Description("要写入的内容"),
		),
	)

	// 追加文件内容工具
	appendFileTool := mcp.NewTool(
		"append_file",
		mcp.WithDescription("将字符串内容追加到指定文件路径"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("文件路径"),
		),
		mcp.WithString("content",
			mcp.Required(),
			mcp.Description("要追加的内容"),
		),
	)

	// 删除文件工具
	deleteFileTool := mcp.NewTool(
		"delete_file",
		mcp.WithDescription("删除指定文件路径"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("文件路径"),
		),
	)

	// 列出目录内容工具
	listFilesTool := mcp.NewTool(
		"list_files",
		mcp.WithDescription("列出指定目录下的所有文件和子目录"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("目录路径"),
		),
	)

	// 创建目录工具
	createDirTool := mcp.NewTool(
		"create_dir",
		mcp.WithDescription("创建指定目录路径"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("目录路径"),
		),
	)

	// 创建目录(如果不存在)工具
	createDirIfNotExistTool := mcp.NewTool(
		"create_dir_if_not_exist",
		mcp.WithDescription("如果目录不存在，则创建它"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("目录路径"),
		),
	)

	// 删除目录工具
	deleteDirTool := mcp.NewTool(
		"delete_dir",
		mcp.WithDescription("删除指定目录路径"),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("目录路径"),
		),
	)

	// 从URL下载文件工具
	getFileByURLTool := mcp.NewTool(
		"get_file_by_url",
		mcp.WithDescription("从URL下载文件到指定路径"),
		mcp.WithString("url",
			mcp.Required(),
			mcp.Description("文件的URL地址"),
		),
		mcp.WithString("path",
			mcp.Required(),
			mcp.Description("保存文件的路径"),
		),
	)

	// 创建文件工具
	createFileTool := mcp.NewTool(
		"create_file",
		mcp.WithDescription("创建一个空文件，可指定路径和文件名，有默认值"),
		mcp.WithString("path",
			mcp.Description("文件路径，默认为当前目录"),
		),
		mcp.WithString("fileName",
			mcp.Description("文件名，默认为new_file.txt"),
		),
	)

	// 统一注册工具
	// 注册读取文件工具
	mcpService.AddTool(readFileTool, mcp_tools.ReadFile)
	// 注册写入文件工具
	mcpService.AddTool(writeFileTool, mcp_tools.WriteFile)
	// 注册追加文件工具
	mcpService.AddTool(appendFileTool, mcp_tools.AppendFile)
	// 注册删除文件工具
	mcpService.AddTool(deleteFileTool, mcp_tools.DeleteFile)
	// 注册列出目录工具
	mcpService.AddTool(listFilesTool, mcp_tools.ListFiles)
	// 注册创建目录工具
	mcpService.AddTool(createDirTool, mcp_tools.CreateDir)
	// 注册创建目录(如果不存在)工具
	mcpService.AddTool(createDirIfNotExistTool, mcp_tools.CreateDirIfNotExist)
	// 注册删除目录工具
	mcpService.AddTool(deleteDirTool, mcp_tools.DeleteDir)
	// 注册从URL下载文件工具
	mcpService.AddTool(getFileByURLTool, mcp_tools.GetFileByURL)
	// 注册创建文件工具
	mcpService.AddTool(createFileTool, mcp_tools.CreateFile)
}
